package com.hangxintong.common.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 逻辑分页工具类
 *
 * @Date 2020/7/15 8:25
 * @Created luoyaa
 */
public class PageHandleUtil {

    /**
     * 逻辑分页
     *
     * @param originList 原理未分页list
     * @param pageNo     显示第几页
     * @param pageSize   每页显示几条
     * @return 返回分页后的实体
     */
    public static Map<String, Object> getPageData(List<?> originList, Integer pageNo, Integer pageSize) {
        // 总页数
        int totalPages;
        // 是否第一页
        boolean first = false;
        // 是否最后一页
        boolean last = false;

        if (pageNo == null || pageNo < 1) {
            pageNo = 1;
        }
        if (pageSize == null || pageSize < 1) {
            pageSize = 10;
        }
        // 要返回的分页集合
        List<Object> resultList = new ArrayList<>();
        // 起点
        int pageStart = (pageNo - 1) * pageSize;
        // 终点
        int pageStop = pageStart + pageSize;
        // 开始遍历
        while (pageStart < pageStop) {
            // 考虑到最后一页可能不够pageSize
            if (pageStart >= originList.size()) {
                break;
            }
            Object o = originList.get(pageStart++);
            resultList.add(o);
        }
        if (pageNo == 1) {
            first = true;
        }
        if (originList.size() % pageSize == 0) {
            totalPages = originList.size() / pageSize;
        } else {
            totalPages = originList.size() / pageSize + 1;
        }
        if (pageNo == totalPages) {
            last = true;
        }
        Map<String, Object> returnMap = new HashMap<>();
        returnMap.put("totalPages", totalPages);
        returnMap.put("result", resultList);
        returnMap.put("first", first);
        returnMap.put("last", last);
        returnMap.put("page", pageNo);
        returnMap.put("size", pageSize);
        returnMap.put("totalElements", Long.valueOf(originList.size()));
        return returnMap;
    }
}
